/**
 * WriteHDFSMap 类继承自 Mapper，用于将输入数据映射为新的键值对输出。
 * 输入键值对的格式为：LongWritable 表示行号，Text 表示该行的字符串。
 * 输出键值对的格式为：Text 表示映射后的键，HotSection 表示映射后的值，其中 HotSection 是一个自定义的类，用来存储热点区域的信息。
 */
package com.liyuan.controller;

import com.liyuan.entity.HotSection;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class WriteHDFSMap extends Mapper<LongWritable, Text, NullWritable, IntWritable> {
    // 定义输出的键和值的实例
    // private Text outK = new Text();
    private HotSection hotSectionV = new HotSection();

    /**
     * map 方法负责处理输入的每行数据，将其映射为新的键值对。
     *
     * @param key     输入行的键，类型为 LongWritable。
     * @param value   输入行的值，类型为 Text。
     * @param context 上下文对象，用于输出映射结果。
     * @throws IOException          当处理输入输出时发生 IO 错误。
     * @throws InterruptedException 当执行过程中被中断时抛出。
     */
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, NullWritable, IntWritable>.Context context) throws IOException, InterruptedException {
        // 将输入的 Text 行转换为字符串并按制表符分割
        String lint = value.toString();
        // System.out.println(lint);
        String[] strings = lint.split("\t");
        // 设置输出键
        // outK.set(strings[0]);
        // 使用分割后的字符串设置 HotSection 对象的属性
        hotSectionV.setSectionYop(Integer.valueOf(strings[0]));
        hotSectionV.setSectionTitle(strings[1]);
        hotSectionV.setSectionContext(strings[2]);
        hotSectionV.setSectionSource(strings[3]);
        hotSectionV.setCreateTime(Long.valueOf(strings[4]));
        // 输出映射结果
        context.write(NullWritable.get(), hotSectionV);
    }
}

